package prh25.biblioteca.service;

import java.io.Serializable;
import java.util.List;

import prh25.biblioteca.entity.Aluno;
import prh25.biblioteca.entity.Coordenador;
import prh25.biblioteca.entity.Documento;
import prh25.biblioteca.entity.Professor;
import prh25.biblioteca.entity.Revisor;
import prh25.biblioteca.entity.Usuario;
import prh25.biblioteca.entity.UsuarioExterno;

public interface ServicosPadroes extends Serializable {

	/**
	 * Salva um aluno no banco de dados.
	 * @param aluno - aluno a ser salvo no banco de dados.
	 * @return Id do aluno se foi salvo com sucesso.
	 */
	public Integer criarAluno(Aluno aluno);
	
	/**
	 * Salva um professor no banco de dados.
	 * @param professor a ser salvo no banco de dados.
	 */
	public Integer criarProfessor(Professor professor);
	
	/**
	 * Salva um Usuario externo ao PRH-25 no banco de dados.
	 * @param usuarioExterno a ser salvo no bancod e dados.
	 */
	public Integer criarUsuarioExterno(UsuarioExterno usuarioExterno);
	
	/**
	 * Salva um coordenador no banco de dados.
	 * @param coordenador - Coordenador a ser inserido no banco de dados.
	 * @return Id do coordenador se foi inserido com sucesso.
	 */
	public Integer criarCoordenador(Coordenador coordenador);
	
	/**
	 * Salva um revisor no banco de dados.
	 * @param revisor a ser salvo no banco de dados.
	 */
	public Integer criarRevisor(Revisor revisor);
	/**
	 * Responsavel por realizar o login de um usuario no sistema.
	 * @param usuario - O login do usuario no sistema.
	 * @param senha - A senha do usuario no sistema.
	 * @return O usuario identificado com o login e a senha passados.
	 */
	public Usuario login(String usuario, String senha);
	
	public Integer ping();
	
	/**
	 * Busca o arquivo no banco de dados para o usuario realizar download.
	 * @param uid - O identificador do documento.
	 * @param diretorioAplicacao - O caminho de onde se encontra o arquivo.
	 * @return O nome do arquivo que sera feito download.
	 */
	public String requisitarArquivoParaDownload(String uid, String diretorioAplicacao);
	
	/**
	 * Apaga o arquivo da pasta temporaria de download que havia sido copiado.
	 * @param uid - Identificador do arquivo.
	 * @param diretorioAplicacao - Caminho da pasta temporaria.
	 * @return True se operacao foi realizada com sucesso, false caso contrario.
	 */
	public boolean limparArquivoRequisitado(String uid, String diretorioAplicacao);
	
	/**
	 * Busca no banco de dados todos os arquivos ativos, consultados pela palavra chave
	 * e que obedecam a uma restricao.
	 * @param palavraChave - A palavra chave da pesquisa.
	 * @param restricao - A restricao que os documentos devem obedecer.
	 * @return Todos os documentos encontrados que contenham a palavra chave 
	 * no titulo, na descricao ou no autor.
	 */
	public List<Documento> listarDocumentosAtivos(String palavraChave, String restricao);
	
	
}
